/*
Hay 2 entidades importantes : EL RECEPTOR, y el EMISOR.

El RECEPTOR es el que tiene el archivo “viejo”;
    y quiere actualizar.

EL EMISOR es el que tiene el archivo “nuevo”;
    y debe señalarle los cambios al RECEPTOR.

( no confundir con cliente / servidor )
Detectar que archivo es “nuevo” o “viejo” queda fuera del scope de esta clase
*/

#ifndef RECEPTORDELTA_H_INCLUDED
#define RECEPTORDELTA_H_INCLUDED
#include <fstream>

#include "DeltaHashes.h"
#include "PaqueteHashReceptor.h"
#include "PaqueteHashEmisor.h"
#include "Diferencial.h"
#include "LectorDeSegmento.h"
#include "StreamBloqueante.h"
class ReceptorDelta:public DeltaHashes{
    private:
    std::list<PaqueteHashReceptor> ListaDeHashes;

    public:

    ReceptorDelta(){}

    ~ReceptorDelta(){}

    // NECESARIO EJECUTAR antes de trabajar con la clase.
    void CalcularHashesVarios();

    unsigned int getCantDePedazos()
    {
        return this->ListaDeHashes.size();
    }

    //Iterador constante. Ademas ,no revela informacion acerca
    //de como es al estructura interna
    std::list<PaqueteHashReceptor>::const_iterator IteratorSobreHashes()
    {
        return this->ListaDeHashes.begin();
    }
    //Esto es lo que hay que enviarle al emisor, para que comparte
    // con sus hashes y nos marque las diferencias
    std::string Serializar();

    std::list<PaqueteHashReceptor> RecuperarHashes();

    bool UpdatearArchivoRespectoAemisor(DatosTrasmitidos<Diferencial> tot);

};

#endif // RECEPTORDELTA_H_INCLUDED
